#ifndef M65c8ae081533472e9e9097f1aaeb0d90
#define M65c8ae081533472e9e9097f1aaeb0d90
/**
 *   Copyright (c) Rich Hickey. All rights reserved.
 *   The use and distribution terms for this software are covered by the
 *   Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
 *   which can be found in the file epl-v10.html at the root of this distribution.
 *   By using this software in any fashion, you are agreeing to be bound by
 * 	 the terms of this license.
 *   You must not remove this notice, or any other, from this software.
 **/

/**
 *   Author: Timothy Baldridge
 **/

#include "CjObject.h"
namespace clojure_lang {
class CjTypeWrapper : public CjObject
{





public:
    enum CjTypeWrapperType {
        VOID_POINTER,
        INT_VALUE,
        FLOAT_VALUE,
        QSTRING_VALUE,
        QCHAR_VALUE

    };
    CjTypeWrapper();
    CjTypeWrapper(int val);
    CjTypeWrapper(QString val);
    CjTypeWrapper(QString *val);
    CjTypeWrapper(QChar val);
    CjTypeWrapper(void *d,clojure_lang::CjTypeWrapper::CjTypeWrapperType _dtype, IPersistentMap *_meta );

    bool isString();
    QString toQString();


    bool operator==(const char *other) const;

    virtual CjObject *withMeta(IPersistentMap *meta);
    virtual bool equals(CjObject *obj);
    virtual CjTypeWrapperType typeCode();
    virtual void *val();
    virtual int getHashCode();
    virtual bool isIndexable();
    virtual CjTypeWrapper *at(int idx);

    operator int ();

private:
    void *_val;
    CjTypeWrapperType _type;
};



/*class CjTypeConversionException
{

} CjTypeConversionException;*/
}
#endif // 65c8ae081533472e9e9097f1aaeb0d90
